#!/bin/bash
# 自动构建项目并完成自动发布 Docker

# 定义一个函数来显示加载动画
# loading() {
#     local msg="$1" # 提示信息
#     local frames="-\|/" # 动画帧序列，这里是三个点
#     local delay=0.1 # 动画帧间隔时间，单位秒
#     local index=0 # 当前帧索引

#     # 清除当前行（如果支持的话，某些终端可能不完全支持）
#     printf "\033[2K\r" # \033[2K 清除整行，\r 回车到行首

#     # 循环显示动画
#     while :; do
#         printf "%s %s" "$msg" "${frames:$index:1}" # 打印当前帧
#         index=$(( (index+1) % ${#frames} )) # 更新帧索引以循环动画
#         sleep $delay
#         printf "\r" # 回车到行首准备下一次覆盖打印
#     done &
#     pid=$! # 记录动画进程ID
# }

# 停止加载动画函数
# stop_loading() {
#     if [ -n "$pid" ]; then
#         kill $pid
#         wait $pid 2>/dev/null # 等待动画进程结束
#         printf "\n" # 停止动画后打印完成信息并换行
#     fi
# }

# 查看当前目录下是否存在 target 文件夹
if [ -d "target" ]; then
  # 存在则删除
  rm -rf target > /dev/null 2>&1
  echo "target 文件夹已删除"
fi

# loading "正在打包..."
# 执行打包命令
mvn clean package > /dev/null 2>&1

# 检查打包结果
if [ $? -eq 0 ]; then
  echo "打包成功"
  else
    echo "打包失败，请检查代码"
    # stop_loading
    exit 1
fi

# stop_loading

# 查看 Docker 环境中是否存在 docker 容器
docker compose ls | grep vue3-admin-server > /dev/null 2>&1

# 如果存在则停止并删除容器
if [ $? -eq 0 ]; then
  docker compose down > /dev/null 2>&1
  echo "已停止并且删除正在运行的容器"
  else
    echo "当前环境中不存在正在运行的容器"
fi

# 查看 Docker 环境中是否存在当前工程的镜像
docker images | grep server-image > /dev/null 2>&1

# 如果存在则删除镜像
if [ $? -eq 0 ]; then
  docker rmi server-image > /dev/null 2>&1
  echo "已删除当前工程镜像"
  else
    echo "当前环境中不存在当前工程镜像"
fi

# loading "正在构建 Docker 镜像..."
# 将当前工程构建为 Docker 镜像
docker build -t server-image . > /dev/null 2>&1

# 判断是否构建成功
if [ $? -eq 0 ]; then
  echo "Docker 镜像构建成功"
  else
    echo "Docker 镜像构建失败"
    # stop_loading
    exit 1
fi

# stop_loading

# 执行 docker-compose 命令启动容器
docker compose up -d > /dev/null 2>&1

docker compose ls | grep vue3-admin-server > /dev/null 2>&1
# 判断是否启动成功
if [ $? -eq 0 ]; then
  echo "容器启动成功"
  else
    echo "容器启动失败"
    exit 1
fi